2017-12-21 13 views
0

다음 활동이로드 된 버튼의 활동 1 및 onClick() 이벤트에 동적으로 버튼을로드하고 있습니다. 아래의 활동에서 버튼과 관련된 세부 정보를 표시합니다. 예를 들어 사용자가 QUEST를 클릭하면 QUEST 세부 정보 만 표시되고 사용자가 SRL을 클릭하면 SRL 세부 정보 만 표시됩니다. 나는 얻을 수 없습니다. 누구든지 도와 줄 수 있습니까?발리를 사용하여 id와 관련된 세부 정보를 표시합니다.

public void loadDescriptionList() { 
    String url = "https://diagnostic.hisaabwaale.in/AndroidAppController/testGet"; 
    final ProgressDialog progressDialog = new ProgressDialog(TestDetails.this); 
    progressDialog.setMessage("Loading Data..."); 
    progressDialog.show(); 
    StringRequest stringRequest = new StringRequest(Request.Method.POST, url, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        progressDialog.dismiss(); 
        try { 
         obj = new JSONObject(response); 
         heroArray = obj.getJSONArray("list"); 
         for (int i = 0; i < heroArray.length(); i++) { 
          heroObject = heroArray.getJSONObject(i); 
          TDescription hero = new TDescription(heroObject.getString("test_code"), heroObject.getString("test_description"), heroObject.getString("test_price")); 
          heroList.add(hero); 
         } 
         adapter = new ListViewAdapter(heroList, getApplicationContext()); 
         listView.setAdapter(adapter); 
        } catch (JSONException e) { 
         progressDialog.dismiss(); 
         e.printStackTrace(); 
         Toast.makeText(getApplicationContext(), "No Records Found", Toast.LENGTH_LONG).show(); 
        } 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        progressDialog.dismiss(); 
        Toast.makeText(getApplicationContext(), "No Records Found", Toast.LENGTH_LONG).show(); 
       } 

      }) { 
     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("franchise", franchise); 
      return params; 
     } 
    }; 
    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    requestQueue.add(stringRequest); 
} 

이 모델

public function testlist($franchise) 
{ 
    $query = "SELECT t.id, t.franchise_id, t.test_code, t.test_description, t.test_price 
      FROM `".$this->table."` as t 
      WHERE t.franchise_id = ".$franchise; 
    $result = $this->db->query($query); 
    if($result->num_rows() > 0){ 
    return $result->result(); 
    }else{ 
    return 0; 
    } 

}

에게 로그 캣 인

function testGet(){ 
    $response = array(); 
    $franchise = $this->input->post('franchise'); 
    $result = $this->testModel->testlist($franchise); 
    if($result != 0){ 
    $response['status'] = 200; 
    $response['list'] = $result; 
    }else{ 
    $response['status'] = 201; 
    $response['msg'] = 'No Records'; 
    } 
    echo json_encode($response); 
} 

백엔드 API

12-22 00:24:34.459 22632-22632/hisaabwaale.in.hisaabwaale E/MultiWindowProxy: getServiceInstance failed! 
01,235,

12-22 00 : 24 : 37.574 22632-22632 /? E/MultiWindowProxy : getServiceInstance가 실패했습니다! 12-22 00 : 24 : 37.696 22632-22632 /? E/MultiWindowProxy : getServiceInstance가 실패했습니다! 12-22 00 : 24 : 38.637 22632-22863 /? E/NativeCrypto : ssl = 0xacc22880 cert_verify_callback x509_store_ctx = 0x9f0f9e4c arg = 0x0 12-22 00 : 24 : 38.637 22632-22863 /? E/NativeCrypto : ssl = 0xacc22880 cert_verify_callback verifyCertificateChain authMethod = ECDHE_RSA 12-22 00 : 24 : 40.080 22632-22664 /? E/Surface : getSlotFromBufferLocked : 알 수없는 버퍼 : 0xa0921dc0 12-22 00 : 24 : 40.111 22632-22632 /? E/오류 : Failedorg.json.JSONException : 인덱스 2가 범위를 벗어남 [0..2) 12-22 00 : 24 : 40.255 22632-22664 /? E/Surface : getSlotFromBufferLocked : 알 수없는 버퍼 : 0xa0921640 12-22 00 : 24 : 55.343 22632-22632 /? E/MultiWindowProxy : getServiceInstance가 실패했습니다! 12-22 00 : 24 : 55.452 22632-23164 /? E/Volley : [125517] NetworkDispatcher.run : 처리되지 않은 예외 java.lang.NullPointerException : null 객체 참조에서 가상 메소드 'int java.lang.String.length()'을 호출하려고 시도했습니다. java.lang.NullPointerException : 시도 NULL 객체 참조에서 가상 메소드 'int java.lang.String.length()'를 호출하십시오. at libcore.net.UriCodec.encode (UriCodec.java:132) at java.net.URLEncoder.encode (URLEncoder.java : 57) at com.android.volley.Request.encodeParameters (Request.java:484) at com.android.volley.Request.getBody (Request.java:470) 에서 com.android.volley.toolbox.HurlStack. addBodyIfExists (HurlStack.java:253) at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest (HurlStack.java:227) com.android.volley.NetworkDispatcher에서 com.android.volley.toolbox.BasicNetwork.performRequest (BasicNetwork.java:97) 에서 com.android.volley.toolbox.HurlStack.performRequest (HurlStack.java:107) 에서 . 실행 (NetworkDispatcher.java:114) 12-22 00 : 24 : 55.742 22632-22664 /? E/표면은 : getSlotFromBufferLocked : 알 수없는 버퍼 : 당신이 다음 활동 열 때 0xa0921aa0

+0

그럼 어떤 퀘스트와 SRL의 ID를입니까? 저는 Postman에서 API를 테스트했고 SRL 또는 QUEST를 보내면 응답 500 응답을 받았습니다. 정수를 보내면 {{ "status": 201, msg ":"No Records "}'나는 PHP에 익숙하지 않지만 Java 코드는 정상적으로 보인다. QUEST/SRL 버튼을 클릭하면'franchise = the_right_ID'가됩니다. 왜 응답을받지 말아야하는지 알 수 없습니다. –

+0

@Stephen Lightcap : 표시 할 레코드가 표시되지 않습니다. ID는 8과 12입니다. –

+0

@Aparana 발리 에러를'onErrorResponse'에 출력 할 수 있습니까? –

답변

0
Button QUEST= (Button) findViewById(R.id.QUEST); 
QUEST.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent mIntent = new Intent(this, Example.class); 
     Bundle extras = mIntent.getExtras(); 
     extras.putString('franchise', '8'); 

    } 
}); 

Button SRL= (Button) findViewById(R.id.SRL); 
SRL.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     //Same as other, just different franchise 
    } 
}); 

:

String franchise = getIntent().getExtras().getString(franchise) 

그런 loadDescriptionList() 전화를 아마 문자열을 한을?

loadDescriptionList(String franchise) 추천하고 새 활동 열 때 : 나는 loadDescriptionList()라는 다음 활동에 있으리라 믿고있어

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    loadDescriptionList(getIntent().getExtras().getString(franchise)) 
} 

합니다. 희망이 올바른 방향으로 당신을 도우십시오.

편집

또한 다음 활동에 값을 전달하기 위해 아래처럼 Bundle를 사용할 수 있습니다

Intent mIntent = new Intent(this, Example.class); 
Bundle mBundle = new Bundle(); 
mBundle.putString(key, value); 
mIntent.putExtras(mBundle); 
+0

하지만 버튼을 동적으로 생성하고 있기 때문에 앞으로 버튼이 더 많아지면 알지 못합니다. 지금 나는 단지 그저 그렇게 행동한다. –

+0

예, 버튼을 반복하면서 클릭 수신기를 추가 할 수 있습니다. [이 내용을 확인하십시오] (https://stackoverflow.com/questions/44680170/adding-a-different-putextra-to-an-intent-for-each-dynamically-created-button) –

+0

나는 당신이 제안한 것을 시도했지만 마지막 ID가 db에 표시됩니다. –