在本文中,我们将为您详细介绍getJSONException:解析JSON响应时无法将类型java.lang.String的值转换为JSONObject的相关知识,此外,我们还会提供一些关于andro
在本文中,我们将为您详细介绍get JSONException:解析JSON响应时无法将类型java.lang.String的值转换为JSONObject的相关知识,此外,我们还会提供一些关于android – org.json.JSONException:值<!DOCTYPE类型java.lang.String无法转换为JSONObject、android – 解析数据时出错org.json.JSONException:值<?xml的java.lang.String类型无法转换为JSONArray、ClassCastException:无法将java.lang.Object []强制转换为java.lang.String [] android、com.google.firebase.database.DatabaseException:无法将类型java.lang.Long的值转换为String问题的有用信息。
本文目录一览:- get JSONException:解析JSON响应时无法将类型java.lang.String的值转换为JSONObject
- android – org.json.JSONException:值<!DOCTYPE类型java.lang.String无法转换为JSONObject
- android – 解析数据时出错org.json.JSONException:值<?xml的java.lang.String类型无法转换为JSONArray
- ClassCastException:无法将java.lang.Object []强制转换为java.lang.String [] android
- com.google.firebase.database.DatabaseException:无法将类型java.lang.Long的值转换为String问题
get JSONException:解析JSON响应时无法将类型java.lang.String的值转换为JSONObject
我已经开发了一个Android应用程序,该应用程序从服务器发送以JSON格式响应的位置坐标(目前仅发送两个位置):
这是来自服务器的PHP代码:
$place = $db->getCoordinates($name);
if ($place != false) {
$response[1]["success"] = 1;
$response[1]["place"]["H"] = $place[1]["H"];
$response[1]["place"]["V"] = $place[1]["V"];
$response[1]["place"]["placeid"] = $place[1]["placeid"];
$response[1]["place"]["name"] = $place[1]["name"];
$response[1]["place"]["type"] = $place[1]["type"];
$response[1]["place"]["note"] = $place[1]["note"];
// place found
// echo json with success = 1
$response[2]["success"] = 1;
$response[2]["place"]["H"] = $place[2]["H"];
$response[2]["place"]["V"] = $place[2]["V"];
$response[2]["place"]["placeid"] = $place[2]["placeid"];
$response[2]["place"]["name"] = $place[2]["name"];
$response[2]["place"]["type"] = $place[2]["type"];
$response[2]["place"]["note"] = $place[2]["note"];
echo json_encode($response);
}
当应用获取坐标时,它将尝试通过以下方式解析坐标:
JSONObject json_places = userFunction.getPlaces();
JSONObject places = json_places.getJSONObject("1");
JSONObject coord = places.getJSONObject("place");
getplaces():
public JSONObject getPlaces(){
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", allcoordinates_tag));
JSONObject json = jsonParser.getJSONFromUrl("http://"+ip+placesURL, params);
// return json
Log.i("JSON", json.toString());
return json;
}
JSONParser:
public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {
// Making HTTP request
try {
// defaultHttpClient
HttpPost httpPost = new HttpPost(url);
HttpParams httpParameters = new BasicHttpParams();
int timeoutConnection = 9000;
httpconnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
int timeoutSocket = 9000;
httpconnectionParams.setSoTimeout(httpParameters, timeoutSocket);
DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
httpentity httpentity = httpResponse.getEntity();
is = httpentity.getContent();
} catch (UnsupportedEncodingException e) {
e.printstacktrace();
}
catch (ConnectTimeoutException e) {
e.printstacktrace();
}
catch (ClientProtocolException e) {
e.printstacktrace();
} catch (Exception e) {
e.printstacktrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
Log.e("JSON", json);
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
这是带有错误的JSON:
当应用程序尝试解析JSON响应时,它崩溃并发送JSONException:类型java.lang.String的值无法转换为JSONObject
我该如何解决?
谢谢
解决方法:
您的Web服务未创建有效的JSON. JSON字符串只能以{或[开头.您以字符串“ Array”开始.
您可以在Wikipedia条目here中了解有关JSON格式的信息.
android – org.json.JSONException:值<!DOCTYPE类型java.lang.String无法转换为JSONObject
我在JsonObject中收到错误:
org.json.JSONException: Value Authorization of type java.lang.String cannot be converted to JSONObject
在我的Android应用程序中,我只是传递API密钥和URL id以获取以下URL中的JSON响应.我使用JSON数组显示JSON内容.
但如果我:
public class AndroidAPiActivity extends Activity { /* * FlickrQuery = FlickrQuery_url * + FlickrQuery_per_page * + FlickrQuery_nojsoncallback * + FlickrQuery_format * + FlickrQuery_tag + q * + FlickrQuery_key + FlickrApiKey */ String FlickrQuery_url = "http://192.138.11.9/api/interests/"; String FlickrQuery_per_page = "&per_page=1"; String FlickrQuery_nojsoncallback = "&nojsoncallback=1"; String FlickrQuery_format = "&format=json"; String FlickrQuery_tag = "&tags="; String FlickrQuery_key = "&api_key="; // Apply your Flickr API: // www.flickr.com/services/apps/create/apply/? String FlickrApiKey = "f65215602df8f8af"; EditText searchText; Button searchButton; TextView textQueryResult,textJsonResult; ImageView imageFlickrPhoto; Bitmap bmFlickr; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); searchText = (EditText)findViewById(R.id.searchtext); searchButton = (Button)findViewById(R.id.searchbutton); textQueryResult = (TextView)findViewById(R.id.queryresult); textJsonResult = (TextView)findViewById(R.id.jsonresult); imageFlickrPhoto = (ImageView)findViewById(R.id.flickrPhoto); searchButton.setonClickListener(searchButtonOnClickListener); } private Button.OnClickListener searchButtonOnClickListener = new Button.OnClickListener(){ public void onClick(View arg0) { // Todo Auto-generated method stub String searchQ = searchText.getText().toString(); String searchResult = QueryFlickr(searchQ); textQueryResult.setText(searchResult); String jsonResult = ParseJSON(searchResult); textJsonResult.setText(jsonResult); if (bmFlickr != null){ imageFlickrPhoto.setimageBitmap(bmFlickr); } }}; private String QueryFlickr(String q){ String qResult = null; String qString = FlickrQuery_url + FlickrQuery_per_page + FlickrQuery_nojsoncallback + FlickrQuery_format + FlickrQuery_tag + q + FlickrQuery_key + FlickrApiKey; HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(qString); try { httpentity httpentity = httpClient.execute(httpGet).getEntity(); if (httpentity != null){ InputStream inputStream = httpentity.getContent(); Reader in = new InputStreamReader(inputStream); BufferedReader bufferedreader = new BufferedReader(in); StringBuilder stringBuilder = new StringBuilder(); String stringReadLine = null; while ((stringReadLine = bufferedreader.readLine()) != null) { stringBuilder.append(stringReadLine + "\n"); } qResult = stringBuilder.toString(); } } catch (ClientProtocolException e) { // Todo Auto-generated catch block e.printstacktrace(); } catch (IOException e) { // Todo Auto-generated catch block e.printstacktrace(); } return qResult; } private String ParseJSON(String json){ String jResult = null; bmFlickr = null; String key_id; String category; String subcategory; String title; String icon_image; try { JSONObject JsonObject = new JSONObject(json); JSONObject Json_photos = JsonObject.getJSONObject("interests"); JSONArray JsonArray_photo = Json_photos.getJSONArray("interest"); //We have only one photo in this exercise JSONObject FlickrPhoto = JsonArray_photo.getJSONObject(0); key_id = FlickrPhoto.getString("row_key"); category = FlickrPhoto.getString("category"); subcategory = FlickrPhoto.getString("subcategory"); title = FlickrPhoto.getString("title"); jResult = "\n key_id: " + key_id + "\n" + "category: " + category + "\n" + "subcategory: " + subcategory + "\n" + "title: " + title + "\n"; bmFlickr = LoadPhotoFromFlickr(key_id,category,subcategory,title); } catch (JSONException e) { // Todo Auto-generated catch block e.printstacktrace(); } return jResult; } private Bitmap LoadPhotoFromFlickr( String key_id,String category,String subcategory,String title){ Bitmap bm= null; String icon_image = null; // String FlickrPhotoPath =""; String FlickrPhotoPath ="http://182.72.180.34/media/"+icon_image+".jpg"; URL FlickrPhotoUrl = null; try { FlickrPhotoUrl = new URL(FlickrPhotoPath); HttpURLConnection httpconnection = (HttpURLConnection) FlickrPhotoUrl.openConnection(); httpconnection.setDoInput(true); httpconnection.connect(); InputStream inputStream = httpconnection.getInputStream(); bm = BitmapFactory.decodeStream(inputStream); } catch (MalformedURLException e) { // Todo Auto-generated catch block e.printstacktrace(); } catch (IOException e) { // Todo Auto-generated catch block e.printstacktrace(); } return bm; } }
解决方法
基于HTML响应,我可以告诉你这不是JSON.该响应告诉我您的Web服务的URL不正确.
您需要检查您的网址.
额外信息/上一个答案:
看起来简单的答案是正确的 – 您的结果不是有效的JSON字符串.有关JSON应该是什么样的详细信息,请参见JSON.org网站.
查看JSON Parser Online – 我发现它在使用JSON时非常有用.
很奇怪你正在请求JSON,它没有正确地返回它 – 也许我错过了一些东西.
android – 解析数据时出错org.json.JSONException:值<?xml的java.lang.String类型无法转换为JSONArray
我得到的代码是从教程中下载的,请耐心等待我已经掌握了一些基本的PHP知识和很少的java知识.我已经测试了PHP脚本,它运行完美,所以我不会费心去附上它.
main.java代码:
package test.an2MysqL; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import org.apache.http.httpentity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.LinearLayout; import android.widget.TextView; public class main extends Activity { /** Called when the activity is first created. */ TextView txt; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Create a crude view - this should really be set via the layout resources // but since its an example saves declaring them in the XML. LinearLayout rootLayout = new LinearLayout(getApplicationContext()); txt = new TextView(getApplicationContext()); rootLayout.addView(txt); setContentView(rootLayout); // Set the text and call the connect function. txt.setText("Connecting..."); //call the method to run the data retreival txt.setText(getServerData(KEY_121)); } public static final String KEY_121 = "http://10.1.1.19/cms/test/android2MysqL/read.PHP"; //i use my real ip here private String getServerData(String returnString) { InputStream is = null; String result = ""; //the data to send ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("country","undefined")); //http post try{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(KEY_121); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); httpentity entity = response.getEntity(); is = entity.getContent(); }catch(Exception e){ Log.e("log_tag","Error in http connection "+e.toString()); } //convert response to string try{ BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); result=sb.toString(); }catch(Exception e){ Log.e("log_tag","Error converting result "+e.toString()); } //parse json data try{ JSONArray jArray = new JSONArray(result); for(int i=0;i<jArray.length();i++){ JSONObject json_data = jArray.getJSONObject(i); Log.i("log_tag","id: "+json_data.getInt("id")+ ",country: "+json_data.getString("country")+ ",documentn: "+json_data.getInt("documentn") ); //Get an output to the screen returnString += "\n\t" + jArray.getJSONObject(i); } }catch(JSONException e){ Log.e("log_tag","Error parsing data "+e.toString()); } return returnString; } }
我很感激你能给我的任何帮助.
解决方法
}catch(JSONException e){ Log.e("log_tag","Error parsing data "+e.toString()); Log.e("log_tag","Failed data was:\n" + result); }
如果它是XML,它几乎肯定是必须的,那么你需要让服务器输出JSON,或者你需要解析它发送给你的XML.
ClassCastException:无法将java.lang.Object []强制转换为java.lang.String [] android
在我的应用程序中,我需要将arraylist转换为数组的字符串。但是,我得到一个错误:
ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[] android
在与listofurls
我在一起的错误:listofurls = (String[])image_urls.toArray();
这是完整的代码:
public class Test2 extends AsyncTask<Void,Void,Void>
{
String[] listofurls ;
private static final String url = "http://www.tts.com/album_pro/array_to_encode";
JSONParser jParser = new JSONParser();
ArrayList<String> image_urls = new ArrayList<String>();
protected void onPreExecute() {
//Log.e(LOG_CLASS,"in side assyntask");
}
protected Void doInBackground(Void... voids) {
Log.v("Async","Async");
JSONObject json = jParser.getJSONFromUrl(url);
try {
JSONObject seo = json.getJSONObject("SEO");
JSONArray folio = seo.getJSONArray("Folio");
// JSONArray image_urls1 = new JSONArray();
//String s1=seo.getString("Folio");
for(int i=0;i<folio.length();++i) {
String m = folio.getString(i);
Log.v("M"+i,m);
image_urls.add(m);
Log("test-url"+image_urls);
}
} catch(Exception e) {
e.printStackTrace();
}
listofurls = (String[])image_urls.toArray(); //ERROR OCCURS HERE
return null;
}
private void Log(String string) {
Log.v("Test",string);
}
protected void onProgressUpdate(Integer... progress) { }
protected void onPostExecute(Void result) {
mAdapter = new ImagePagerAdapter(getSupportFragmentManager(),listofurls.length );
mAdapter.setImageurls(listofurls);
mPager.setAdapter(mAdapter);
}
com.google.firebase.database.DatabaseException:无法将类型java.lang.Long的值转换为String问题
您正在将答案(optionA
,optionB
等)存储为数字,并存储在Question1
中,但是您正在尝试将其转换为字符串。
如果您直接访问DataSnapshot
值,则可以使用以下方法获取对象:
myRef.child("SETS").child(category).child("Questions").orderByChild("setNo").equalTo(setNo).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Log.i("Database",snapshot.child("optionA").getValue();
}
如果要将选项放入Java类中,唯一的方法是将所有答案声明为Object
:
public class QuestionsModel {
private Object optionA,optionB,optionC,optionD,correctAns;
private int setNo;
private String question;
public QuestionsModel(){
}
public QuestionsModel(String question,String optionA,String optionB,String optionC,String optionD,String correctAns,int setNo) {
this.setNo = setNo;
this.question = question;
this.optionA = optionA;
this.optionB = optionB;
this.optionC = optionC;
this.optionD = optionD;
this.correctAns = correctAns;
}
public String getQuestion() {
return question;
}
public void setQuestion(String question) {
this.question = question;
}
public Object getOptionA() {
return optionA;
}
public void setOptionA(Object optionA) {
this.optionA = optionA;
}
public Object getOptionB() {
return optionB;
}
public void setOptionB(Object optionB) {
this.optionB = optionB;
}
public Object getOptionC() {
return optionC;
}
public void setOptionC(Object optionC) {
this.optionC = optionC;
}
public Object getOptionD() {
return optionD;
}
public void setOptionD(Object optionD) {
this.optionD = optionD;
}
public Object getCorrectAns() {
return correctAns;
}
public void setCorrectAns(Object correctAns) {
this.correctAns = correctAns;
}
public int getSetNo() {
return setNo;
}
public void setSetNo(int setNo) {
this.setNo = setNo;
}
}
但是通常,我建议在数据库中修复Question1
的答案类型,并将其存储为字符串值。
今天关于get JSONException:解析JSON响应时无法将类型java.lang.String的值转换为JSONObject的介绍到此结束,谢谢您的阅读,有关android – org.json.JSONException:值<!DOCTYPE类型java.lang.String无法转换为JSONObject、android – 解析数据时出错org.json.JSONException:值<?xml的java.lang.String类型无法转换为JSONArray、ClassCastException:无法将java.lang.Object []强制转换为java.lang.String [] android、com.google.firebase.database.DatabaseException:无法将类型java.lang.Long的值转换为String问题等更多相关知识的信息可以在本站进行查询。
本文标签: