Sematnics3 API导致“ NoSuchMethod”错误

时间:2019-09-20 17:34:08

标签: java android-studio nosuchmethoderror

我正在使用的Android应用中使用Semantics3 API。我只是按照Semantics3文档中提供的一个基本示例提出一个非常基本的请求。问题是当我搜索产品时,应用程序将崩溃。因此,我设置了一些断点,并发现了一个“ NoSuchMethod错误。具体来说就是这样:

java.lang.NoSuchMethodError: No direct method <init>(Ljava/io/InputStream;)V in class Lorg/json/JSONTokener; or its super classes (declaration of 'org.json.JSONTokener' appears in /system/framework/core-libart.jar)

这是触发呼叫的主要活动中的相关代码。

    private String TAG = "MainActivity";
    private EditText searchBox;
    private Button searchButton;
    private Products products;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        searchBox = findViewById(R.id.searchBox);
        searchButton = findViewById(R.id.searchButton);

        // Set up a client to talk to the Semantics3 API using API credentials
        products = new Products("xxx", "xxx");

        searchButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String searchText = searchBox.getText().toString();
                Log.d(TAG, searchText);
                products.productsField("search", searchText);

                AsyncCall serviceCall = new AsyncCall();
                serviceCall.execute(products);
            }
        });
    }
}

这是AsyncCall类。错误发生在.get()方法内。

public class AsyncCall extends AsyncTask<Products, Void, JSONObject> {
    String TAG = "Async";

    @Override
    protected JSONObject doInBackground(Products... products){
        JSONObject results = null;
        Products product = products[0];
        try{
            results = product.get();
            Log.d(TAG, results.toString()) ;
        }catch(Throwable e){
            Log.d(TAG, e.toString());
            Log.d(TAG, e.getStackTrace().toString());
        }
        return results;
    }
    ...
    ...

下面是导致错误的Semantics3 API的一些代码。

protected JSONObject fetch(String endpoint, String params) throws
            OAuthMessageSignerException,
            OAuthExpectationFailedException,
            OAuthCommunicationException,
            IOException, URISyntaxException {
        ...
        ...
        ...
        request.connect();
        try {
            JSONObject json = new JSONObject(new JSONTokener(request.getInputStream()));
            if (!json.has("code")){
                json.put("code", "OK");
            }
            return json;
        }
        catch (IOException e) {
            InputStream error = ((HttpURLConnection) request).getErrorStream();
            JSONObject json = new JSONObject(new JSONTokener(error));
            if (!json.has("code")) {
                json.put("code", "Error");
            }
            else {
                Object value = json.get("code");
                json.put("code", value.toString());
            }
            return json;
        }
    }

这是这行

JSONObject json = new JSONObject(new JSONTokener(request.getInputStream()));

会导致错误,并且由于它是错误而不是异常,所以它不会被Semantics3代码中围绕它的try-catch块捕获,而是被我的异步调用程序类中的try-catch块捕获。奇怪的是,当我单步执行代码,到达那一行并尝试单步执行而不是结束时,Android Studio不会跳至包含相关代码的文件,即使调试器在框架中列出了该代码也是如此。调试器部分。

因此,我正在寻找有关可能导致此问题以及如何解决此问题的建议。如果有所作为,Semantics3提供了一个Maven依赖项来添加,但我将其转换为gradle而不是将其添加到AndroidStudio中。意思是这样

<dependency>
        <groupId>com.semantics3</groupId>
        <artifactId>Sem3Java</artifactId>
        <version>1.2.4</version>
    </dependency>

但是我将此添加到了gradle

    implementation 'com.semantics3:Sem3Java:1.2.4'

此外,在文档中,它指出Semantics3库的Java版本是JDK7,但是我正在运行8。我不知道这些东西是否可能是该问题的一部分或促成此问题,但是我想我会分享它,以防相关。感谢您提供的任何帮助,在此先感谢。

0 个答案:

没有答案