org.json.JSONException:类型为java.lang.String的值〈!DOCTYPE无法转换为JSONObject

nkoocmlb  于 2023-02-06  发布在  Java
关注(0)|答案(7)|浏览(155)

这里我想使用API密钥显示JSON内容。但是我无法获得身份验证。
我在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;
   }
}
a0x5cqrl

a0x5cqrl1#

更新:

根据HTML响应,我可以告诉你这不是JSON,响应告诉我你的Web服务的URL不正确。
您需要检查您的URL。

附加信息/上一个答案:

看起来简单的答案是正确的-您的结果不是一个有效的JSON字符串。有关JSON应该是什么样子的详细信息,请参阅JSON.org网站。
查看JSON Parser Online-我发现它在使用JSON时非常有用。
奇怪的是,您正在请求JSON,而它没有正确地返回它--也许我错过了什么。

bvn4nwqk

bvn4nwqk2#

是的,当给定的URL无效时,我们会收到此类警告。
只需检查URL一次。

2w3rbyxf

2w3rbyxf3#

从API中删除docType。并设置内容类型Application/json。(因为text/html不会读作json。因此您会看到错误。)

0g0grzrc

0g0grzrc4#

也许这个能帮上忙
https://teamtreehouse.com/community/solved-exception-cannot-convert-string-type-to-json-object
解决了。
原来运行时错误延伸回上一个视频。
我在做
JSONObject当前=新的JSONObject("当前");代替

JSONObject currently = forecast.getJSONObject("currently");

所以我的猜测是Android认为我试图设置一个全新的JSON对象,而不是试图从现有对象中检索信息!:)现在控制台完美地显示时间!

ghhaqwfi

ghhaqwfi5#

我也遇到过这个问题,我将互联网连接更改为另一个网络,它工作正常。
问题是ISP不接受http访问。
另一个解决方案,你可以打开VPN,然后重试,也许它的工作...

kmbjn2e3

kmbjn2e36#

如何修复以下错误:

=============================================================================

组织. json. JSON异常:java. lang. String类型的值无法转换为JSONObject
组织. json. JSON异常:类型为java. lang. String的值权限无法转换为JSONObject

==============================================================================
这可能不适用于此特定场景,但它会作为给定问题/关键字的顶级搜索结果出现。
所以,我从codecanyon上的一个专业卖家那里买了一个剧本。
剧本由3个主要部分组成;- 主购物车网站(PHP)-主管理网站+/API(PHP)-安卓管理应用程序(JAVA)
安装脚本后,我发现了许多问题,从主购物车站点上的表数组不完整或丢失,然后我在ANDROID ADMIN应用程序上遇到了一个问题,(在检查日志后)显示mysqli_exception是罪魁祸首。
因此,在花了几个小时摆弄循环并试图找出问题所在之后,在实际学习了如何将输出转储到logs/logcat之后,我能够确定它实际上是一个;

    • 自MYSQL-8以来的突破性变化**

要修复,请在mysql终端运行以下命令;

SET GLOBAL sql_mode = '';
  SET SESSION sql_mode = '';

这删除了"严格模式"在其他规则中,已经引起了我这么多的悲伤在过去几天.我想我最好分享答案,希望节省别人的眼睛干燥的折磨天=].
记得重新引入默认规则集,一次一个规则,并测试你的应用程序可以支持哪些模式(如果这个解决方案解决了你的问题),因为它们无疑是必要的安全/数据完整性措施,有很好的理由。理想情况下,更新代码库,以符合当前的标准。不幸的是,这远远超出了我在这个阶段。
希望这对你们有用。

lkaoscv7

lkaoscv77#

我收到了相同的"<!Doctype..."错误时,谷歌翻译的json网址.然后,我发现这个代码的地方,它的工作:

BasicHttpParams basicHttpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout((HttpParams)basicHttpParams, (int)10000);
        HttpConnectionParams.setSoTimeout((HttpParams)basicHttpParams, (int)10000);
        HttpConnectionParams.setTcpNoDelay((HttpParams)basicHttpParams, (boolean)true);
        DefaultHttpClient defaultHttpClient = new DefaultHttpClient((HttpParams)basicHttpParams);
        HttpGet httpGet = new HttpGet(url);
        BasicResponseHandler basicResponseHandler = new BasicResponseHandler();

        JSONObject json=null;
        try {
            json = new JSONObject((String)defaultHttpClient.execute((HttpUriRequest)httpGet, (ResponseHandler)basicResponseHandler));
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

相关问题