ここに問題がありました。結果からAsynctaskの後にViewPagerを更新します
mysqlデータベースに接続するphpファイルから何らかの結果を得るためにasynctaskを実行するlogin_activityがあります。私は結果を取得すると
public class login_main extends AppCompatActivity implements OnDataSendToActivity{
ViewPager viewPager;
CustomAdapter adapter;
ArrayList<String> image = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
//setSupportActionBar(toolbar);
String type = "getProfileImages";
RetrieveData retrieveData = new RetrieveData(this);
retrieveData.execute(type);
//After Asycntask, get the result and put back into image array
viewPager = (ViewPager) findViewById(R.id.view_pager);
adapter = new CustomAdapter(login_main.this,image);
viewPager.setAdapter(adapter);
}
public void sendData(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray result = jsonObject.getJSONArray("result");
for (int i = 0 ; i < result.length(); i++) {
JSONObject obj = result.getJSONObject(i);
String id = obj.getString("image"+i);
image.add("http://192.168.12.252/"+id+"/profile.png");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
は私がPageAdapterにそれを渡したときに画像アレイ常に空のことを除いて正常に動作しているasynctask
protected void onPostExecute(String result) {
super.onPostExecute(result);
dataSendToActivity.sendData(result);
}
すべてのインタフェースを使用して結果を処理してみてください。どのように私はasycntaskからの活動にデータを渡すことができますし、配列の画像にプッシュ、インターフェイスを使用して、それは仕事を傾ける。
私はAsynaskで直接処理し、ViewPagerを更新できます。ここで
は、実行順序が全て台無しにされた私のAsynctask
public class RetrieveData extends AsyncTask<String,Void,String>{
Context context;
RetrieveData(Context ctx) {
context = ctx;
}
private OnDataSendToActivity dataSendToActivity;
public RetrieveData(Activity activity){
dataSendToActivity = (OnDataSendToActivity)activity;
}
@Override
protected String doInBackground(String... params) {
String profile_url = "http://192.168.12.252/getprofile.php";
String image_url = "http://192.168.12.252/imagelist.php";
String type = params[0];
if(type.equals("getProfile")){
try {
String user_name = params[1];
URL url = new URL(profile_url);
HttpURLConnection httpURLConnection = null;
httpURLConnection = (HttpURLConnection)url.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
OutputStream outputStream = httpURLConnection.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
String post_data = URLEncoder.encode("user_name", "UTF-8")+"="+URLEncoder.encode(user_name, "UTF-8");
bufferedWriter.write(post_data);
bufferedWriter.flush();
bufferedWriter.close();
outputStream.close();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"));
String result = null;
result = bufferedReader.readLine();
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
return result;
} catch (IOException e) {
e.printStackTrace();
}
}else if(type.equals("getProfileImages")){
try {
URL url = new URL(image_url);
HttpURLConnection httpURLConnection = null;
httpURLConnection = (HttpURLConnection)url.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
OutputStream outputStream = httpURLConnection.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
String post_data = URLEncoder.encode("Image", "UTF-8")+"="+URLEncoder.encode("Image", "UTF-8");
bufferedWriter.write(post_data);
bufferedWriter.flush();
bufferedWriter.close();
outputStream.close();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"iso-8859-1"));
String result = null;
result = bufferedReader.readLine();
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
return result;
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
dataSendToActivity.sendData(result);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
}
あなたの 'AsyncTask'はここに投稿できますか? – AndiGeeky
例外を受け取っているかどうかをチェックし、sendData()で 'result'の長さもチェックしてください。 'JSONException'または' result'の長さが0として返される可能性があります。 –
@RaviRupareliya結果に何かがあり、それが私が望むものです。ご覧のとおり、配列に文字列を追加するためにループを作成しました。 Log.d配列の場合、配列内に3文字列がありますが、ビューページに戻ると、画像には何も得られません。 –