【问题标题】:Java Android Studio Null Pointer Exception on Jaunt WebcrawlerJaunt Webcrawler 上的 Java Android Studio 空指针异常
【发布时间】:2018-08-18 16:05:52
【问题描述】:

我正在尝试从网站运行简单的 Jaunt 示例,但出现空指针异常错误。我不确定该怎么做,因为在 Android Studio 中使用 Jaunt 的支持很少。这是我的代码:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    try{
        UserAgent userAgent = new UserAgent();
        userAgent.visit("http://jaunt-api.com/examples/signup.htm");         
    }
    catch(JauntException e){
        System.out.println(e);
    }

}

}

这是我运行它时遇到的错误:

java.lang.NullPointerException: Attempt to invoke interface method 'void com.android.okhttp.internal.http.Transport.writeRequestHeaders(com.android.okhttp.Request)' on a null object reference

错误出现在 userAgent.visit 行。

这是我得到代码的地方:http://jaunt-api.com/jaunt-tutorial.htm

【问题讨论】:

  • 嗨,你能提供你在哪里学习教程或者你从哪里得到这个代码吗?
  • @GastónSaillén 请帮帮我...我对 Java 还是很陌生,只有 16 岁,正在努力为学校做一个项目。
  • 对不起,伙计,我离开电脑有点时间去吃晚饭,你能发布更多你的代码吗?你在哪里做这个尝试
  • 你能粘贴完整的堆栈跟踪吗

标签: java android browser web-scraping jaunt-api


【解决方案1】:

如果您未能先连接 HttpURLConnection,通常会在 Android 上出现此问题 - 或者如果您忘记将 Internet 权限添加到清单中,则可能会产生副作用

【讨论】:

    【解决方案2】:

    首先确保您的网址正确

    http://jaunt-api.com/examples/signup.htm 
    

    这绝对是错误的网址

    然后

    这是一个可以在 OkHttp 中使用的 NPE 解决方法类

    public class NullOnEmptyConverterFactory extends Converter.Factory {
    
    
        @Override
        public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
            final Converter<ResponseBody, ?> delegate = retrofit.nextResponseBodyConverter(this, type, annotations);
            return (Converter<ResponseBody, Object>) body -> {
                if (body.contentLength() == 0) return null;
                return delegate.convert(body);
            };
        }
    }
    

    在你的 OkHttp 客户端构建器中首先添加网络拦截器,顺序很重要

    【讨论】:

      【解决方案3】:

      尝试在您的AndroidManifest.xml 中添加权限:

      <uses-permission
           android:name="android.permission.WRITE_EXTERNAL_STORAGE"
           android:maxSdkVersion="18" />
      <uses-permission
           android:name="android.permission.INTERNET"
           android:maxSdkVersion="18" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多