2017-03-17 12 views
0

ここに問題がありました。結果から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); 
    } 
} 
+1

あなたの 'AsyncTask'はここに投稿できますか? – AndiGeeky

+0

例外を受け取っているかどうかをチェックし、sendData()で 'result'の長さもチェックしてください。 'JSONException'または' result'の長さが0として返される可能性があります。 –

+0

@RaviRupareliya結果に何かがあり、それが私が望むものです。ご覧のとおり、配列に文字列を追加するためにループを作成しました。 Log.d配列の場合、配列内に3文字列がありますが、ビューページに戻ると、画像には何も得られません。 –

答えて

0

です。 urイメージ・アレイにデータを追加する時間までに、空のイメージ・アレイはビュー・ページャ・アダプタにすでに渡されているため、イメージ・アレイは空である。

同じことを続けますが、onCreate()でビュー・ページャ・アダプタを設定する代わりに、sendData()メソッドをコールした後にアダプタを設定します。

このようにsendData()メソッドを変更します。

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(); 
     } 
    adapter = new CustomAdapter(login_main.this,image);//set ur image array here 
     viewPager.setAdapter(adapter); 
    } 
+0

答えをありがとう。私は以前これを試してみましたが、ViewPagerは狂っています。私が2番目のイメージのために左にスライドしようとすると、それは常に最初のイメージに戻ります。それはこの部分がループし続けているように思えますし、常に画像1に設定します。 –

+0

共有ビュービューアページャアダプタコードは間違いなくURアダプタにエラーがあります.. @ ChongWaiLun –

+0

あなたは正しいです!問題の原因となっている問題があります。ありがとうございました! –

関連する問題