2016-07-21 13 views
0

Ich werde alle Benutzerdaten vom Server im JSON-Format nehmen. die PHP-Code generieren cool, aber ich kann nicht alle JSON in okhttp Antwort bekommen. in der Tat lädt es nur einen Teil von JSON nicht alle von ihnen.OkHttp3 lädt nicht alle JSON-Daten vom Server

plus: der grund, warum ich diesen code verwende ist, dass ich alle benutzerdaten vom server im login-prozess nehmen will. hier ist mein Code in

import android.os.AsyncTask; 
import android.util.Log; 

import com.example.android.shopping.Helper.Tags; 
import com.example.android.shopping.Model.Suggestion; 
import com.example.android.shopping.Model.product; 
import com.example.android.shopping.Model.user; 



import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import okhttp3.MultipartBody; 
import okhttp3.OkHttpClient; 
import okhttp3.Request; 
import okhttp3.RequestBody; 
import okhttp3.Response; 

/** 
* Created by Android on 7/21/2016. 
*/ 
public class SelectAll_INFO_NetworkCallTask extends AsyncTask <String,Void,String>{ 
    public static List<product> listOfProduct=new ArrayList<>(); 
    public static List<Suggestion> listOfSuggestion=new ArrayList<>(); 
    public static user myUser=new user(); 


    public user getUser=new user(); 
    private OkHttpClient client=new OkHttpClient(); 
    String Result=""; 
    public SelectAll_INFO_NetworkCallTask(user user) 
    { 
     this.getUser = user; 
    } 

    @Override 
    protected String doInBackground(String... params) { 

     try { 
      RequestBody requestBody; 
      requestBody = new MultipartBody.Builder() 
        .setType(MultipartBody.FORM) 
        .addFormDataPart("action", getUser.getStatus()) 
        .addFormDataPart("userId",String.valueOf(getUser.getUsId())) 
        .build(); 

      Request request = new Request.Builder() 
        .url(Tags.SelectAllAddress) 
        .post(requestBody) 
        .build(); 

      Response response = client.newCall(request).execute(); 

      Result=response.body().string(); 

      return Result; 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 


     return null; 
    } 

    @Override 
    protected void onPostExecute(String o) { 
     super.onPostExecute(o); 

     Log.d("Output is:",o); 


    } 
} 

und dies ist, wie nenn ich es:

public void RegForm(View view) 
    { 
    /* Intent intent=new Intent(this,RegisterUserActivity.class); 
     startActivity(intent);*/ 
     user myUser=new user(); 
     myUser.setStatus("palt"); 
     myUser.setUsId(22); 
     SelectAll_INFO_NetworkCallTask infoCallTask=new SelectAll_INFO_NetworkCallTask(myUser); 
     infoCallTask.execute(); 
    } 

und auch this is the expected and gotten data i shared on gist

+0

Wie überprüfen Sie die Daten, die Sie erhalten? – Bryan

+0

Ich überprüfe die Daten in meinem Logcat wie Sie sehen können Ich drucke die Daten mit Log.d ("Output is:", o); in onPostExecute – AndroidDev

Antwort

1

Nun zuerst; Sie sollten notAsyncTask mit OkHttp verwenden. OkHttp hat seinen eigenen asynchronen Callback:

client.newCall(request).enqueue(new Callback() { 

    @Override 
    public void onFailure(Call call, IOException exception) { 
     exception.printStackTrace(); 
    } 

    @Override 
    public void onResponse(Call call, Response response) { 
     // Handle response 
    } 

} 

Zweitens, um Ihre Frage zu beantworten; logcat hat eine maximale Nachrichtenausgabe, die geräteabhängig ist. Daher wird die Ausgabe einer Zeichenfolge, die länger als dieses Maximum ist, abgeschnitten. OkHttp empfängt also die gesamte Antwort, logcat kann nicht alles in einer Nachricht anzeigen.