Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 9 years ago.
Improve this question
I am android beginner and trying to fetch pnr status using json here is my code which is not working please help me .
Also tell me which parsing method is goo xml parse or json parse.
When you asking questions, using some more words to describe your problem will always help. If there are really nothing more to say, just copy some random paragraph from internet, but make sure you mark them as dummy text so that people won't pay attention on them.
public class JSON extends Activity {
String completeData="";
TextView tv;
EditText et;
Button bt;
HttpClient client;
JSONObject jsonobj;
final static String URI="http://pnrapi.alagu.net/api/v1.0/pnr/";
String pnr_no=null;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_json);
tv=(TextView) findViewById(R.id.textView1);
et=(EditText) findViewById(R.id.editText1);
bt=(Button) findViewById(R.id.button1);
client=new DefaultHttpClient();
}
public void showpnr(View v){
pnr_no=et.getText().toString();
if(pnr_no.equals("")){
Toast.makeText(this, "Enter the Valid Pnr", Toast.LENGTH_LONG).show();
return;
}
GetPNR pnr=new GetPNR();
pnr.execute("train-name");
completeData="";
}
public JSONArray pnr(String username){
JSONArray jarray=null;
try
{
StringBuilder builder=new StringBuilder(URI);
builder.append(username);
HttpGet get=new HttpGet(builder.toString());
HttpResponse response=client.execute(get);
int status =response.getStatusLine().getStatusCode();
if(status==200){
HttpEntity entity=response.getEntity();
String data=EntityUtils.toString(entity);
jarray=new JSONArray(data);
}
else{
Toast.makeText(this, "Error", Toast.LENGTH_LONG).show();
}
}catch(ClientProtocolException e){
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}
catch(JSONException e){
e.printStackTrace();
}
catch(Exception e){
e.printStackTrace();
}
return jarray;
}
JSONObject js_pnr=new JSONObject();
public class GetPNR extends AsyncTask<String, Integer, ArrayList<String>>
{
#Override
protected void onPreExecute() {
// TODO Auto-generated method stub
tv.setText("Loading Pnr status");
super.onPreExecute();
}
#Override
protected ArrayList<String> doInBackground(String... params) {
// TODO Auto-generated method stub
ArrayList<String> al_texts=new ArrayList<String>();
try{
JSONArray data =pnr(pnr_no);
if(data==null){
return null;
}
int count=data.length();
JSONObject jobj=new JSONObject();
for(int i=0;i<count;i++){
jobj=data.getJSONObject(i);
al_texts.add(jobj.getString("train-name").toString());
}
return al_texts;
}catch(JSONException e){
e.printStackTrace();
}
return null;
}
#Override
protected void onPostExecute(ArrayList<String> al_pnrText) {
if(al_pnrText==null){
tv.setText("Pnr not found");
return;
}
for(String string:al_pnrText){
completeData+=string+System.getProperty("line.seperator")
+System.getProperty("line.seperator");
}
tv.setText("pnr status:"+System.getProperty("line.seperator")+completeData);
}
}
}
Inside your button onclick just write:
bt.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
// TODO Auto-generated method stub
String details = "";
GetPNR pnrDetails = new GetPNR();
try {
details = pnrDetails.execute(URI+et.getText().toString()).get();
Log.d("train", details);
tv.setText(details);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
And the Asynctask is like:
public class GetPNR extends AsyncTask<String, Integer, String> {
#Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
String al_texts = "";
for(String newUrl:params){
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(newUrl);
HttpResponse response;
try {
response = client.execute(get);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String webData = "";
while((webData = reader.readLine()) != null){
Log.i("data", webData);
JSONObject myAwway = new JSONObject(webData);
JSONObject data = myAwway.getJSONObject("data");
Log.i("data", data.toString());
JSONObject travelDate = data.getJSONObject("travel_date");
JSONObject from = data.getJSONObject("from");
JSONObject to = data.getJSONObject("to");
JSONObject alright = data.getJSONObject("alight");
JSONObject board = data.getJSONObject("board");
JSONArray passenger = data.getJSONArray("passenger");
al_texts = data.getString("train_name");
Log.i("data", al_texts);
}
} 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();
}
}
return al_texts;
}
}
here I'm showing/returning only a string(train name).Like this you can show every details .
this is your modified code and working fine.
Related
This question already has answers here:
What is a NullPointerException, and how do I fix it?
(12 answers)
Closed 7 years ago.
Plz help me
When we get data from server and save in a string variable, it is store in a variable but cantnot retrive.
public class Profile extends Activity {
ListView list;
Activity act;
String[] username = { "Pankaj", "Aaa" };
TextView name;
JSONObject object;
String url = "http://thinksl.com/taughtable/profile.php?user_email=pank#gmail.com";
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.profile);
list = (ListView) findViewById(R.id.list);
name = (TextView) findViewById(R.id.mailid);
Custom_Profile pro = new Custom_Profile(Profile.this, username);
list.setAdapter(pro);
new Userdata().execute(url);
}
public class Userdata extends AsyncTask<String, Void, String> {
public static final int connection_type = 1500;
Profile p = new Profile();
ProgressDialog dialog;
String resul;
HashMap<String, String> user;
#Override
protected void onPreExecute() {
// TODO Auto-generated method stub
dialog = new ProgressDialog(Profile.this);
dialog.setTitle("Processing");
dialog.setMessage("Loading Data.Please wait....");
dialog.setCancelable(false);
dialog.show();
}
#Override
protected String doInBackground(String... url) {
// TODO Auto-generated method stub
Log.e("result", "Do in background");
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, connection_type);
HttpConnectionParams.setSoTimeout(params, connection_type);
HttpClient client = new DefaultHttpClient(params);
ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();
param.add(new BasicNameValuePair("user_email", "pank#gmail.com"));
HttpGet get = new HttpGet(url[0]);
try {
Log.e("result", "Try");
HttpResponse response = client.execute(get);
Log.e("result", "Response" + response);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity);
Log.e("result", "result" + result);
JSONObject jobject = new JSONObject(result);
object = jobject.getJSONObject("userdetail");
Log.e("result", "result" + object);
String name = object.getString("user_login");
int post = object.getInt("month");
Log.e("name", "name" + name);
Log.e("name", "post" + post);
Log.e("result", "result" + resul);
user = new HashMap<String, String>();
user.put("name", name);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
#Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
dialog.dismiss();
String s = user.get("name").toString();
p.name.setText(s);
}
}
}
The problem is that you are returning always null, after catch you have the only returning.
Look the last line of doinbackground method, "returning null".
So change to this:
HttpGet get = new HttpGet(url[0]);
HttpResponse response = client.execute(get);
Log.e("result", "Response" + response);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity);
return result;
And in the postexecute method do it:
#Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
try {
JSONObject jobject = new JSONObject(result);
object = jobject.getJSONObject("userdetail");
Log.e("result", "result" + object);
String name = object.getString("user_login");
int post = object.getInt("month");
Log.e("name", "name" + name);
Log.e("name", "post" + post);
Log.e("result", "result" + resul);
user = new HashMap<String, String>();
user.put("name", name);
dialog.dismiss();
String s = user.get("name").toString();
p.name.setText(s);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
use this code
JSONObject res = new JSONObject(result);
JSONObject response = res.getJSONObject("userdetail");
String niceName = response.getString("user_nicename");
String displayName = response.getString("display_name");
I would like to connect to a Api url, retrieve the json and store everything in a object list. Here is an example of what the url can return as Json.
The following code was given to me but it returns a error Cannot resolve method setOnResponse in my activity line 31
This is my activity.java
public class resultOverview_activity extends Activity implements onResponse{
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.result_overview);
Bundle search_activity_data = getIntent().getExtras();
if(search_activity_data == null){
return;
}
String URL = "http://www.gw2spidy.com/api/v0.9/json/item-search/Sunrise";
AsyncTask parkingInfoFetch = new AsyncFetch(this);
parkingInfoFetch.setOnResponse(this);
parkingInfoFetch.execute(URL);
//Log.i("gw2Log", parkingInfoFetch.);
}
#Override
public void onResponse(JSONObject object) {
Log.d("Json Response", "Json Response" + object);
ResultClass resultClass = new ResultClass();
try {
resultClass.setCount(object.getInt("count"));
resultClass.setPage(object.getInt("page"));
resultClass.setLast_page(object.getInt("last_page"));
resultClass.setTotal(object.getInt("total"));
JSONArray array = new JSONArray(object.getString("results"));
for (int i = 0; i < resultClass.getTotal(); i++) {
JSONObject resultsObject = array.getJSONObject(i);
resultClass.setData_id(resultsObject.getInt("data_id"));
resultClass.setName(resultsObject.getString("name"));
resultClass.setRarity(resultsObject.getInt("rarity"));
resultClass.setRestriction_level(resultsObject
.getInt("restriction_level"));
resultClass.setImg(resultsObject.getString("img"));
resultClass.setType_id(resultsObject.getInt("type_id"));
resultClass.setSub_type_id(resultsObject.getInt("sub_type_id"));
resultClass.setPrice_last_changed(resultsObject
.getString("price_last_changed"));
resultClass.setMax_offer_unit_price(resultsObject
.getInt("max_offer_unit_price"));
resultClass.setMin_sale_unit_price(resultsObject
.getInt("min_sale_unit_price"));
resultClass.setOffer_availability(resultsObject
.getInt("offer_availability"));
resultClass.setSale_availability(resultsObject
.getInt("sale_availability"));
resultClass.setSale_price_change_last_hour(resultsObject
.getInt("sale_price_change_last_hour"));
resultClass.setOffer_price_change_last_hour(resultsObject
.getInt("offer_price_change_last_hour"));
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
AsyncFetch.java class
public class AsyncFetch extends AsyncTask<String, Void, JSONObject> {
public AsyncFetch(Context context) {
this.context = context;
}
private Context context;
private JSONObject jsonObject;
private onResponse onResponse;
public onResponse getOnResponse() {
return onResponse;
}
public void setOnResponse(onResponse onResponse) {
this.onResponse = onResponse;
}
#Override
protected JSONObject doInBackground(String... params) {
// TODO Auto-generated method stub
try {
HttpGet get = new HttpGet(params[0]);
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(get);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity);
jsonObject = new JSONObject(result);
} 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();
}
return jsonObject;
}
#Override
protected void onPostExecute(JSONObject result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
this.onResponse.onResponse(result);
}
public interface onResponse {
public void onResponse(JSONObject object);
}
}
And ofcourse the constructur ResultClass which i assume is not necessary to include here as code.
What does this error Cannot resolve method setOnResponse mean and how do i fix this?
Change this line:
AsyncTask parkingInfoFetch = new AsyncFetch(this);
To this:
AsyncFetch parkingInfoFetch = new AsyncFetch(this);
The error means that the line:
parkingInfoFetch.setOnResponse(this);
Is trying to call a method defined in the subclass AsyncFetch, but you have the variable defined as the parent class AsyncTask which has no method setOnResponse.
I am doing a validation for fields in an android form.I am checking with server whether the username is available in the server or not.But the main thread goes to the next page before the async checking completes.
The code:
btnnext1.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
isallValid=true;
//check second time for username validation(first time was in onfocus changed)
// if(txtusername.getText().toString().trim().equals("achuthan")){
// txtusername.setError("Username exsists!");
// isUsernameValid=false;
// }
//
// else
// {
// isUsernameValid=true;
// }
try {
Void async_result=new validateusername().execute().get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(txtfullname.getText().toString().trim().length()==0)
{
txtfullname.requestFocus();
txtfullname.setError("Field required");
isallValid=false;
}
if(txtdob.getText().toString().trim().length()==0)
{
txtdob.requestFocus();
txtdob.setError("Field required");
isallValid=false;
}
if(txtoccupation.getText().toString().trim().length()==0)
{
txtoccupation.requestFocus();
txtoccupation.setError("Field required");
isallValid=false;
}
if(txtusername.getText().toString().trim().length()<6){
txtusername.requestFocus();
txtusername.setError("Minimum length of 6 characters");
isallValid=false;
}
if(txtpassword.getText().toString().trim().length()==0)
{
txtpassword.requestFocus();
txtpassword.setError("Field required");
isallValid=false;
}
if(txtconfirmpassword.getText().toString().trim().length()==0)
{
txtconfirmpassword.requestFocus();
txtconfirmpassword.setError("Field required");
isallValid=false;
}
else if(!txtpassword.getText().toString().trim().equals(txtconfirmpassword.getText().toString().trim()))
{
//txtconfirmpassword.requestFocus();
txtconfirmpassword.setError("Passwords not equal");
txtpassword.setError("Passwords not equal");
isallValid=false;
}
if(isallValid&&isUsernameValid)
{
//Toast.makeText(getActivity(),"VALID FORM!!",Toast.LENGTH_LONG).show();
((SignUpPage)getActivity()).getValues().fullname=txtfullname.getText().toString().trim();
((SignUpPage)getActivity()).getValues().dob=txtdob.getText().toString().trim();
int id=radiogender.getCheckedRadioButtonId();
RadioButton rb=(RadioButton) view.findViewById(id);
String gender=rb.getText().toString();
((SignUpPage)getActivity()).getValues().gender=gender;
int id1=radiomarital.getCheckedRadioButtonId();
RadioButton rb1=(RadioButton) view.findViewById(id1);
String marital_status=rb1.getText().toString();
((SignUpPage)getActivity()).getValues().marital_status=marital_status;
((SignUpPage)getActivity()).getValues().occupation=txtoccupation.getText().toString().trim();
((SignUpPage)getActivity()).getValues().username=txtusername.getText().toString().trim();
((SignUpPage)getActivity()).getValues().password=txtpassword.getText().toString().trim();
((SignUpPage)getActivity()).selectFragment(1);
}
//if all valid , store values and go to next fragment
//((SignUpPage)getActivity()).selectFragment(1);
}
});
return view;
}
The async class:
public class validateusername extends AsyncTask<String,Void,Void>
{
#Override
protected Void doInBackground(String... arg0) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(URL);
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("username",txtusername.getText().toString().trim()));
try {
httppost.setEntity(new UrlEncodedFormEntity(pairs));
response = httpclient.execute(httppost);
result=responsetostring.getResponseBody(response);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
#Override
protected void onPostExecute(Void result1) {
try {
jsonobj=new JSONObject(result);
job2=jsonobj.getJSONObject("server_message");
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
finalresult=job2.getString("username_availability_message");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(finalresult.equals("exist")){
txtusername.setError("Username exsists!");
isUsernameValid=false;
}
else if(finalresult.equals("available"))
{
isUsernameValid=true;
}
}
}
I tried using the get method so that the main thread waits till the async class finishes but it didnt work.Please help!!
Check isallValid only in button click , then Do this validation inside your onPostExecute(Void result) method,
if(isUsernameValid)
{
//Toast.makeText(getActivity(),"VALID FORM!!",Toast.LENGTH_LONG).show();
((SignUpPage)getActivity()).getValues().fullname=txtfullname.getText().toString().trim();
((SignUpPage)getActivity()).getValues().dob=txtdob.getText().toString().trim();
int id=radiogender.getCheckedRadioButtonId();
RadioButton rb=(RadioButton) view.findViewById(id);
String gender=rb.getText().toString();
((SignUpPage)getActivity()).getValues().gender=gender;
int id1=radiomarital.getCheckedRadioButtonId();
RadioButton rb1=(RadioButton) view.findViewById(id1);
String marital_status=rb1.getText().toString();
((SignUpPage)getActivity()).getValues().marital_status=marital_status;
((SignUpPage)getActivity()).getValues().occupation=txtoccupation.getText().toString().trim();
((SignUpPage)getActivity()).getValues().username=txtusername.getText().toString().trim();
((SignUpPage)getActivity()).getValues().password=txtpassword.getText().toString().trim();
((SignUpPage)getActivity()).selectFragment(1);
}
now it will work.................
Do not use get() to call the AsyncTask, it hangs your UI.
So call your AsyncTask like,
String userName = txtusername.getText().toString().trim();
new validateusername().execute(userName); // pass the String from EditText, as you cannot interact with UI in doInBackground
Modify your AsyncTask like
public class validateusername extends AsyncTask<String,Void,String>
{
#Override
protected String doInBackground(String... arg0) {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(URL);
List<NameValuePair> pairs = new ArrayList<NameValuePair>();
pairs.add(new BasicNameValuePair("username",arg0[0])); // arg0[0] is the username passed from AsyncTask call
try {
httppost.setEntity(new UrlEncodedFormEntity(pairs));
response = httpclient.execute(httppost);
result=responsetostring.getResponseBody(response);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
#Override
protected void onPostExecute(String result1) {
try {
jsonobj=new JSONObject(result);
job2=jsonobj.getJSONObject("server_message");
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
finalresult=job2.getString("username_availability_message");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(finalresult.equals("exist")){
txtusername.setError("Username exsists!");
isUsernameValid=false;
}
else if(finalresult.equals("available"))
{
isUsernameValid=true;
}
if(txtfullname.getText().toString().trim().length()==0)
{
txtfullname.requestFocus();
txtfullname.setError("Field required");
isallValid=false;
}
if(txtdob.getText().toString().trim().length()==0)
{
txtdob.requestFocus();
txtdob.setError("Field required");
isallValid=false;
}
if(txtoccupation.getText().toString().trim().length()==0)
{
txtoccupation.requestFocus();
txtoccupation.setError("Field required");
isallValid=false;
}
if(txtusername.getText().toString().trim().length()<6){
txtusername.requestFocus();
txtusername.setError("Minimum length of 6 characters");
isallValid=false;
}
if(txtpassword.getText().toString().trim().length()==0)
{
txtpassword.requestFocus();
txtpassword.setError("Field required");
isallValid=false;
}
if(txtconfirmpassword.getText().toString().trim().length()==0)
{
txtconfirmpassword.requestFocus();
txtconfirmpassword.setError("Field required");
isallValid=false;
}
else if(!txtpassword.getText().toString().trim().equals(txtconfirmpassword.getText().toString().trim()))
{
//txtconfirmpassword.requestFocus();
txtconfirmpassword.setError("Passwords not equal");
txtpassword.setError("Passwords not equal");
isallValid=false;
}
if(isallValid&&isUsernameValid)
{
//Toast.makeText(getActivity(),"VALID FORM!!",Toast.LENGTH_LONG).show();
((SignUpPage)getActivity()).getValues().fullname=txtfullname.getText().toString().trim();
((SignUpPage)getActivity()).getValues().dob=txtdob.getText().toString().trim();
int id=radiogender.getCheckedRadioButtonId();
RadioButton rb=(RadioButton) view.findViewById(id);
String gender=rb.getText().toString();
((SignUpPage)getActivity()).getValues().gender=gender;
int id1=radiomarital.getCheckedRadioButtonId();
RadioButton rb1=(RadioButton) view.findViewById(id1);
String marital_status=rb1.getText().toString();
((SignUpPage)getActivity()).getValues().marital_status=marital_status;
((SignUpPage)getActivity()).getValues().occupation=txtoccupation.getText().toString().trim();
((SignUpPage)getActivity()).getValues().username=txtusername.getText().toString().trim();
((SignUpPage)getActivity()).getValues().password=txtpassword.getText().toString().trim();
((SignUpPage)getActivity()).selectFragment(1);
}
}
onPostExecute(), check the conditions and navigate to next activity.
how to get text from json without [" "] only text ,in android project
this is my json from url {"code":200,"lang":"en-ru","text":["Better late than never"]}
i need get text "text":["Better late than never"] without [" "] only text: Better late than never
myclass MAINACTIVITY
public class MainActivity extends Activity {
JSONParser jsonparser = new JSONParser();
TextView tv;
String ab;
JSONObject jobj = null;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tvResult);
new retrievedata().execute();
}
class retrievedata extends AsyncTask<String,String,String>{
#Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
jobj = jsonparser.makeHttpRequest("https://translate.yandex.net/api/v1.5/tr.json/translate?key=YOURAPIKEY&text=Better%20late%20than%20never&lang=ru");
// check your log for json response
Log.d("Login attempt", jobj.toString());
ab = jobj.optString("text");
return ab;
}
protected void onPostExecute(String ab){
tv.setText(ab);
}
}
}
MY JSONPARSER CLASS
public class JSONParser {
static InputStream is = null;
static JSONObject jobj = null;
static String json = "";
public JSONParser(){
}
public JSONObject makeHttpRequest(String url){
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
try {
HttpResponse httpresponse = httpclient.execute(httppost);
HttpEntity httpentity = httpresponse.getEntity();
is = httpentity.getContent();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"),8);
StringBuilder sb = new StringBuilder();
String line = null;
try {
while((line = reader.readLine())!=null){
sb.append(line+"\n");
}
is.close();
json = sb.toString();
try {
jobj = new JSONObject(json);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jobj;
}
}
From your json from url {"code":200,"lang":"en-ru","text":["Better late than never"]}
Try this...
Yout JSON structure
{
"code": 200,
"lang": "en-ru",
"text": [
"Better late than never"
]
}
You can get your output using below..
try {
JSONObject jsonObj = new JSONObject(json);
String code = jsonObj.getString("code");
String lang = jsonObj.getString("lang");
JSONArray text = jsonObj.getJSONArray("text");
Log.e("output", "code:" + code + "\nlang:" + lang + "\ntext"
+ text.getString(0));
} catch (Exception e) {
e.printStackTrace();
}
replace
ab = jobj.optString("text");
with
JSONArray txt = jobj.getJSONArray("text");
ab=txt.getString(0);
I'm trying to retrieve the TextBox value when I press the button, but it does not work. Here is my code. Any idea?
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;
}
}
It shows no error but it shows txt value as blank
Because you are calling this line
new Read().execute("displayprice");
in onCreate
Where as txt value is changing when you click on button.
So you are accessing txt value before assigning it. if you want to use the value change like this and try like this
public void onClick(View arg0) {
et=(EditText)findViewById(R.id.text);
txt=et.getText().toString();
new Read().execute("displayprice");
}
});
Reference it outside Button click.
et=(EditText)findViewById(R.id.text);
Access directly inside AsynTask shown below
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);
}
}