2013-03-03 1 views
1

Я пытаюсь получить значение TextBox, когда я нажимаю кнопку, но это не работает. Вот мой код. Есть идеи?Чтение из текстового поля при нажатии кнопки в android

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.httpxml); 
    httpstuff = (TextView) findViewById(R.id.http); 
    client = new DefaultHttpClient(); 
    button = (Button)findViewById(R.id.shoppingprice); 
    button.setOnClickListener(new OnClickListener() { 

    public void onClick(View arg0) { 

       //shoppingapi price = new shoppingapi(); 
       et=(EditText)findViewById(R.id.text); 
       txt=et.getText().toString(); 

      } 

     }); 


    new Read().execute("displayprice"); 
} 

@SuppressLint("ShowToast") 
public JSONObject productprice(String productname) throws ClientProtocolException,IOException,JSONException 
{ 

    StringBuilder url = new StringBuilder(URL); 
    url.append(productname); 
    url.append("&searchType=keyword&contentType=json"); 

    HttpGet get = new HttpGet(url.toString()); 

    HttpResponse r = client.execute(get); 
    int status = r.getStatusLine().getStatusCode(); 

    Log.d("Price", "asdasd"); 

    if(status == 200){ 
     HttpEntity e = r.getEntity(); 
     String data = EntityUtils.toString(e); 
     jObj = new JSONObject(data); 
     JSONObject jsonData = jObj.getJSONObject("mercadoresult"); 
     JSONObject jsonProducts = jsonData.getJSONObject("products"); 
     JSONArray jsonArray = jsonProducts.getJSONArray("product"); 
     jsonArray = (JSONArray) jsonArray.get(1); 

     jObj = (JSONObject)jsonArray.get(0); 

     return jObj; 
     } 
    else 
    { 
    Toast.makeText(MainActivity.this,"error",Toast.LENGTH_LONG).show(); 

    return null;  

    } 
} 

public class Read extends AsyncTask<String,Integer,String> 
{ 


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

     try { 

      json = productprice(txt); 

      return json.getString("displayprice"); 

     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      //e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      //e.printStackTrace(); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      //e.printStackTrace(); 
     } 

     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     //super.onPostExecute(result); 

     //httpstuff.setText("The price of the Product is "); 
     httpstuff.setText(result); 
     httpstuff.setText(txt); 
    } 


} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
// Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

} 

Он не показывает ошибку, но она показывает txt значение как пустое

+0

У вас есть какие-либо ошибки? – moDev

+1

Вы извлекли текст и сохранили его в переменной 'txt'. Но вы ничего не делаете с этой переменной txt. –

+0

в другом разделе, который я пытался отобразить, он показывает пустое – CanucksGirl

ответ

3

Поскольку вы вызываете эту линию

new Read().execute("displayprice"); 

in onCreate

В случае изменения значения txt при нажатии кнопки.

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

public void onClick(View arg0) { 

      et=(EditText)findViewById(R.id.text); 
      txt=et.getText().toString(); 

      new Read().execute("displayprice"); 

     } 

    }); 
+0

СПАСИБО ВАС СПАСИБО ВАС ... Я переместил Read to on click..проблема решена – CanucksGirl

0

Reference его вне Button нажмите.

et=(EditText)findViewById(R.id.text); 

доступа непосредственно внутри AsynTask показано ниже

public class Read extends AsyncTask<String,Integer,String> 
{ 

String txt = et.getText().toString();

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

    try { 

     json = productprice(txt); 

     return json.getString("displayprice"); 

    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     //e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     //e.printStackTrace(); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     //e.printStackTrace(); 
    } 

    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
protected void onPostExecute(String result) { 
    // TODO Auto-generated method stub 
    //super.onPostExecute(result); 

    //httpstuff.setText("The price of the Product is "); 
    httpstuff.setText(result); 
    httpstuff.setText(txt); 
} 
}