2016-07-21 3 views
0

Im собирает все пользовательские данные с сервера в формате json. php генерировать код прохладно, но я не могу получить все json в okhttp Response. на самом деле он просто загружает часть json не всех из них.OkHttp3 не загружает все данные json с сервера

plus: причина, по которой я использую этот код, заключается в том, что я хочу взять все пользовательские данные с сервера в процессе входа в систему. вот мой код в

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); 


    } 
} 

и это как я называю это:

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(); 
    } 

, а также this is the expected and gotten data i shared on gist

+0

Как вы проверяете данные, которые получаете? – Bryan

+0

Я проверяю данные в своем логарифмическом режиме, так как вы можете видеть, что я печатаю данные с помощью Log.d («Output is:», o); в onPostExecute – AndroidDev

ответ

1

Ну первый; вы должны not использовать AsyncTask с OkHttp. OkHttp имеет собственный асинхронный обратный вызов:

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 
    } 

} 

Во-вторых, чтобы ответить на ваш вопрос; logcat имеет максимальный вывод сообщения, зависящий от устройства. Поэтому вывод любой строки, длина которой превышает этот максимум, будет усечена. Таким образом, OkHttp получает весь ответ, logcat просто не может отобразить его все в одном сообщении.