Sematnics3 API приводит к ошибке «NoSuchMethod» - PullRequest
0 голосов
/ 20 сентября 2019

Я использую Semantics3 API в приложении для Android, над которым я работаю.Я просто делаю очень простой запрос, следуя базовому примеру, представленному в документации 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;
    }
    ...
    ...

Ниже приведен фрагмент кода из семантики3.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()));

приводит к ошибке, и поскольку это ошибка, а не исключение, она нене пойман блоком try-catch, окружающим его в коде Semantics3, но блоком try-catch в моем классе Async Caller. Странно то, что когда я прохожу код, достигаю эту строку и пытаюсь войти в строкуAndroid Studio не переходит к файлу, который содержит соответствующий код, а не больше, хотя отладчик перечисляет его в разделе кадров отладчика.

Так что я ищуза совет относительно того, чтоЯ буду вызывать эту проблему и как ее решить.Если это имеет значение, Semantics3 дал зависимость Maven для добавления, но вместо этого я преобразовал ее в стандартную, чтобы добавить ее в AndroidStudio.Это означало, что это дало

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

, но я добавил это в gradle

    implementation 'com.semantics3:Sem3Java:1.2.4'

Кроме того, в документации указано, что версия Java для библиотеки Semantics3это JDK7, но я работаю 8. Я не знаю, может ли какая-либо из этих вещей быть частью или способствовать этой проблеме, но я решила поделиться ею, если это уместно.Я ценю любую помощь, которую вы, ребята, можете предложить, заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...